﻿using System;

namespace Practice920
{
    internal class Program
    {/// <summary>
     /// Moving Game
     /// </summary>
     /// <param name="args"></param>
        static void Main(string[] args)
        {
            //1.first set x,y original position
            int x = 0, y = 0;
            ConsoleKey input;//do函数外定义input,若input在do函数内部定义，则在作用域外的while（input）出错
            //隐藏光标
            Console.CursorVisible = false;
            do
            {
                //2.output a string at position x,y
                Console.Clear();//清屏，防止屏幕上有字
                Console.SetCursorPosition(x, y);//光标移动到x,y
                Console.Write("Hello");

                //3.Get user input using console.Readkey
                input = Console.ReadKey(true).Key;//（）内加true跳跃时不显示光标
                                                  //对象console调用成员函数ReadKey读取用户输入的键赋值到input;
                                                  //key是readkey的属性；Readkey().key的返回类型是consolekeyinfor
                                                  //4.Change x,y according to user input
                switch (input)
                {
                    //输入enter跳出程序
                    case ConsoleKey.Enter:
                        break;
                    //输入A光标左移
                    case ConsoleKey.A:
                        if (x > 0)
                            x--;
                        break;
                    //输入D光标右移
                    case ConsoleKey.D:
                        if (x < 80)//缓冲期的长度-句子长=限制
                            x++;
                        break;
                    //输入W光标上移
                    case ConsoleKey.W:
                        if (y > 0)
                            y--;//CSharp中坐标y轴方向是向下的
                        break;
                    //输入S光标下移
                    case ConsoleKey.S:
                        if (y < 80)
                            y++;
                        break;
                    //输入其他，跳出程序
                    default:
                        break;
                }
                //5.Go back to step 2.//循环有4种 do至少执行一次  while可以一次都不执行  至少在0,0位置执行一次，故选do
            } while (input != ConsoleKey.Enter);
        }
    }
}
